package com.admin_system.mapper;

import com.admin_system.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
    User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
    void insert(User user);
    int countByUsername(@Param("username") String username);
    int countByPhone(@Param("phone") String phone);
    
    /**
     * 根据邮箱统计用户数量
     * @param email 邮箱
     * @return 用户数量
     */
    int countByEmail(@Param("email") String email);
    
    User findByUsername(@Param("username") String username);
    User findByPhone(@Param("phone") String phone);
    
    /**
     * 根据邮箱查找用户列表
     * @param email 邮箱
     * @return 用户对象列表，不存在则返回空列表
     */
    List<User> getUserByEmail(@Param("email") String email);
    
    /**
     * 根据真实姓名查找用户
     * @param fullName 真实姓名
     * @return 用户对象，不存在则返回null
     */
    User findByFullName(@Param("fullName") String fullName);
    
    void updateLastLoginTime(User user);
    
    /**
     * 更新用户的真实姓名
     * @param userId 用户ID
     * @param fullName 新的真实姓名
     * @return 受影响的行数
     */
    int updateUserFullName(@Param("userId") Integer userId, @Param("fullName") String fullName);
    
    /**
     * 更新用户密码
     * @param userId 用户ID
     * @param password 新密码(已加密)
     * @return 受影响的行数
     */
    int updateUserPassword(@Param("userId") Integer userId, @Param("password") String password);
    
    /**
     * 更新用户的token
     * @param userId 用户ID
     * @param token JWT token
     * @return 受影响的行数
     */
    int updateUserToken(@Param("userId") Integer userId, @Param("token") String token);
    
    /**
     * 统计活跃用户总数
     * @return 活跃用户总数
     */
    @Select("SELECT COUNT(*) FROM users WHERE is_active = true")
    int countTotal();
}